#include "../include/Btcar.h"
#include "../include/move.h"
#include "../include/pwm.h"
#include "../include/bt.h"
//这个文件体现了对象的思想 没啥问题
uint8_t arr[6]; // 一个包含6个uint8_t元素的数组，用于临时存储从蓝牙连接中读取的原始数据。
Btcar::Btcar(const Pin_move &pin, const Speed_Handle &speedhandle, const Servo_Handle &servohandle)
{
  // 配置引脚
  pinmove = pin;
  // 速度参数
  speedHandle = speedhandle;
  // 舵机参数
  servoHandle = servohandle;
  // 初始化方向和速度
  BtData = 0;
}
void Btcar::init()
{
  // 初始化蓝牙
  Bt_init();
  // 初始化车轮GPIO
  Car_init(pinmove);
  // 初始化pwm
  speed_init(speedHandle);
  servo_init(servoHandle);
}
void Btcar::Bt_receive()
{
  if (SerialBT.available()) // 检查蓝牙串行连接是否有数据可读。
  {
    // 从蓝牙连接中读取6个字节的数据，并存储在arr数组中。
    SerialBT.readBytes(arr, sizeof(arr)); // 接收数据包
    if((arr[0]==BtData.data_head)&&arr[5]==BtData.data_tail)
    {
      BtData=arr;
    }
  }
}
void Btcar::Move_switch()
{
  // 输出传入的方向
  switch (BtData.direction)
  {
  case 3:
    Go_Forward(pinmove);
    break;
  case 4:
    Go_Back(pinmove);
    break;
  case 1:
    Turn_Left(pinmove);
    break;
  case 2:
    Turn_Right(pinmove);
    break;
  case 10:
    U_Turn_Right(pinmove);
    break;
  case 9:
    U_Turn_Left(pinmove);
    break;
  case 6:
    Right_Forward(pinmove);
    break;
  case 7:
    Left_Back(pinmove);
    break;
  case 5:
    Left_Forward(pinmove);
    break;
  case 8:
    Right_Back(pinmove);
    break;
  case 0:
    Stop(pinmove);
    break;
  }
}
void Btcar::Pwm_speed()
{
  // 输出速度
  ledcWrite(speedHandle.CHANNEL, BtData.speed * 2);
}
void Btcar::Pwm_servo()
{
  // 输出舵机
  ledcWrite(servoHandle.CHANNEL, calculateServo(45* 2));
  // BtData.servo
}